from rest_framework import serializers
from django_redis import get_redis_connection
# serializers.ModelSerializer
# serializers.Serializer
#我们没有关联模型 所以我们选择Serializer

class RegisterSmscodeSerializer(serializers.Serializer):
    text = serializers.CharField(label='图片验证码',max_length=4,min_length=4,required=True)
    image_code_id = serializers.UUIDField(label='uuid',required=True)

    """
    对数据的验证有 4中方式:
        1.字段类型
        2.字段选项
        3.单字段校验
        4.多字段校验

    """
    # def validate(self,data):  attrs 就相当于data
    def validate(self, attrs):
        #获取image_code_id
        image_code_id = attrs.get('image_code_id')
        #1.获取用户传入的图片验证码
        text = attrs.get('text')
        #2.获取redis中的图片验证码
        #连接redis
        redis_conn = get_redis_connection('code')
        #2.1获取验证码
        redis_text = redis_conn.get("img_%s"%image_code_id)
        #2.3注意有效期
        if redis_text is None:
            raise serializers.ValidationError('图片验证码已过期')

        #3.将二者进行对比
            # 注意点: redis的数据是 bytes类型
            #       大小写
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('图片验证码不一致')
        #必须将验证过后的值返回给前端
        return attrs